﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaleida.ServiceMonitor.Framework;
using NUnit.Framework;

namespace Kaleida.UnitTests.Framework
{
	[TestFixture]
	public class ScheduledTimeTests
	{
		[Test]
		[ExpectedException(typeof(ArgumentOutOfRangeException), ExpectedMessage = "Must be between 0 and 23\r\nParameter name: hour\r\nActual value was -1.")]
		public void TestExceptionIsThrownIfHourIsNegative()
		{
			new ScheduledTime(-1, 32); // throws
		}

		[Test]
		[ExpectedException(typeof(ArgumentOutOfRangeException), ExpectedMessage = "Must be between 0 and 23\r\nParameter name: hour\r\nActual value was 24.")]
		public void TestExceptionIsThrownIfHourGreaterThan23()
		{
			new ScheduledTime(24, 32); // throws
		}

		[Test]
		[ExpectedException(typeof(ArgumentOutOfRangeException), ExpectedMessage = "Must be between 0 and 59\r\nParameter name: minute\r\nActual value was -1.")]
		public void TestExceptionIsThrownIfMinuteIsNegative()
		{
			new ScheduledTime(09, -1); // throws
		}

		[Test]
		[ExpectedException(typeof(ArgumentOutOfRangeException), ExpectedMessage = "Must be between 0 and 59\r\nParameter name: minute\r\nActual value was 60.")]
		public void TestExceptionIsThrownIfMinuteIsGreaterThan59()
		{
			new ScheduledTime(09, 60); // throws
		}

		[Test]
		public void TestToString()
		{
			Assert.AreEqual("09:32", new ScheduledTime(9, 32).ToString());
			Assert.AreEqual("14:05", new ScheduledTime(14, 5).ToString());
		}

		[Test]
		public void TestToTimeSpan()
		{
			var timeSpan = new ScheduledTime(9, 32).ToTimeSpan();
			Assert.AreEqual(9, timeSpan.Hours);
			Assert.AreEqual(32, timeSpan.Minutes);
			Assert.AreEqual(0, timeSpan.Seconds);
			
		}
	}
}
